voracious_radix_sort 0.1.0

Very fast radix sort for all Rust primitive types and struct (except Array and tuple)
Documentation
Tests performed on:
Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
Cache L1d :           32K
Cache L1i :           32K
Cache L2 :            256K
Cache L3 :            3072K
16 GB RAM

December 2019

running 1 test
1 iteration
=== Test u32 ===	Ska Sort (Rust)		Raw Voracious sort (Rust)	Ska sort (cpp)	
Array size: 100
-- Unif       :5us	0ns	(57.07ns)	2us	0ns	(28.00ns)	11581ns
-- Unif 10^9  :2us	0ns	(21.73ns)	2us	0ns	(20.97ns)	11213ns
-- Asc        :0us	0ns	(2.69ns)	0us	0ns	(1.50ns)	5940ns
-- Equal      :0us	0ns	(1.34ns)	0us	0ns	(1.32ns)	1509ns
-- Sqrt       :1us	0ns	(17.02ns)	1us	0ns	(14.52ns)	
Array size: 1000
-- Unif       :28us	0ns	(28.69ns)	37us	0ns	(37.80ns)	77052ns
-- Unif 10^9  :21us	0ns	(21.90ns)	17us	0ns	(17.87ns)	92152ns
-- Asc        :33us	0ns	(33.16ns)	1us	0ns	(1.27ns)	71953ns
-- Equal      :18us	0ns	(18.23ns)	1us	0ns	(1.10ns)	85597ns
-- Sqrt       :17us	0ns	(17.87ns)	15us	0ns	(15.44ns)	
Array size: 10000
-- Unif       :228us	0ns	(22.88ns)	211us	0ns	(21.10ns)	553291ns
-- Unif 10^9  :279us	0ns	(27.93ns)	221us	0ns	(22.10ns)	406362ns
-- Asc        :161us	0ns	(16.14ns)	8us	0ns	(0.81ns)	586244ns
-- Equal      :88us	0ns	(8.83ns)	7us	0ns	(0.72ns)	294278ns
-- Sqrt       :257us	0ns	(25.71ns)	83us	0ns	(8.37ns)	
Array size: 100000
-- Unif       :2769us	0ns	(27.70ns)	2099us	0ns	(21.00ns)	2492929ns
-- Unif 10^9  :2753us	0ns	(27.54ns)	1593us	0ns	(15.93ns)	2162418ns
-- Asc        :1670us	0ns	(16.70ns)	92us	0ns	(0.92ns)	1413987ns
-- Equal      :729us	0ns	(7.29ns)	67us	0ns	(0.68ns)	2800005ns
-- Sqrt       :2727us	0ns	(27.28ns)	1374us	0ns	(13.75ns)	
Array size: 500000
-- Unif       :15273us	0ns	(30.55ns)	8152us	0ns	(16.30ns)	10942864ns
-- Unif 10^9  :13714us	0ns	(27.43ns)	11390us	0ns	(22.78ns)	14182440ns
-- Asc        :7901us	0ns	(15.80ns)	391us	0ns	(0.78ns)	19526681ns
-- Equal      :3400us	0ns	(6.80ns)	638us	0ns	(1.28ns)	3643098ns
-- Sqrt       :10661us	0ns	(21.32ns)	8636us	0ns	(17.27ns)	
Array size: 1000000
-- Unif       :25628us	0ns	(25.63ns)	18983us	0ns	(18.98ns)	24251259ns
-- Unif 10^9  :26300us	0ns	(26.30ns)	24354us	0ns	(24.35ns)	31172701ns
-- Asc        :16176us	0ns	(16.18ns)	831us	0ns	(0.83ns)	22352786ns
-- Equal      :6851us	0ns	(6.85ns)	1284us	0ns	(1.28ns)	7301383ns
-- Sqrt       :17816us	0ns	(17.82ns)	16974us	0ns	(16.97ns)	
Array size: 2000000
-- Unif       :52697us	0ns	(26.35ns)	44480us	0ns	(22.24ns)	56103779ns
-- Unif 10^9  :62631us	0ns	(31.32ns)	54710us	0ns	(27.36ns)	64744770ns
-- Asc        :32955us	0ns	(16.48ns)	1760us	0ns	(0.88ns)	29352215ns
-- Equal      :13735us	0ns	(6.87ns)	1476us	0ns	(0.74ns)	16620264ns
-- Sqrt       :38477us	0ns	(19.24ns)	33866us	0ns	(16.93ns)	
Array size: 5000000
-- Unif       :134594us	0ns	(26.92ns)	127591us	0ns	(25.52ns)	163168049ns
-- Unif 10^9  :135922us	0ns	(27.18ns)	115308us	0ns	(23.06ns)	139621488ns
-- Asc        :81564us	0ns	(16.31ns)	4091us		0ns	(0.82ns)	71843929ns
-- Equal      :34493us	0ns	(6.90ns)	3816us		0ns	(0.76ns)	36496214ns
-- Sqrt       :79367us	0ns	(15.87ns)	77956us		0ns	(15.59ns)	
Array size: 10000000
-- Unif       :315921us	0ns	(31.59ns)	269690us	0ns	(26.97ns)	315729691ns
-- Unif 10^9  :243514us	0ns	(24.35ns)	209630us	0ns	(20.96ns)	253836231ns
-- Asc        :162218us	0ns	(16.22ns)	8341us		0ns	(0.83ns)	143863400ns
-- Equal      :68654us	0ns	(6.87ns)	7330us		0ns	(0.73ns)	73458122ns
-- Sqrt       :141714us	0ns	(14.17ns)	99572us		0ns	(9.96ns)	
Array size: 50000000
-- Unif       :1230596us	0ns	(24.61ns)	1062286us	0ns	(21.25ns)	1292027078ns
-- Unif 10^9  :1414828us	0ns	(28.30ns)	1058032us	0ns	(21.16ns)	1230739625ns
-- Asc        :877265us		0ns	(17.55ns)	40922us		0ns	(0.82ns)	829843577ns
-- Equal      :345177us		0ns	(6.90ns)	37552us		0ns	(0.75ns)	366375452ns
-- Sqrt       :639743us		0ns	(12.79ns)	456812us	0ns	(9.14ns)	
Array size: 100000000
-- Unif       :3327166us	0ns	(33.27ns)	2056039us	0ns	(20.56ns)	2538759347ns
-- Unif 10^9  :2861775us	0ns	(28.62ns)	2480081us	0ns	(24.80ns)	2980772348ns
-- Asc        :1787088us	0ns	(17.87ns)	81869us		0ns	(0.82ns)	1660289846ns
-- Equal      :682540us		0ns	(6.83ns)	75305us		0ns	(0.75ns)	734046548ns
-- Sqrt       :1210586us	0ns	(12.11ns)	859901us	0ns	(8.60ns)	
Array size: 250000000
-- Unif       :7115579us	0ns	(28.46ns)	5594929us	0ns	(22.38ns)	6613685170ns
-- Unif 10^9  :7430464us	0ns	(29.72ns)	6998937us	0ns	(28.00ns)	8738308819ns
-- Asc        :4513817us	0ns	(18.06ns)	204597us	0ns	(0.82ns)	4158394470ns
-- Equal      :1706559us	0ns	(6.83ns)	182428us	0ns	(0.73ns)	1835335197ns
-- Sqrt       :2982572us	0ns	(11.93ns)	2370835us	0ns	(9.48ns)	
Array size: 500000000
-- Unif       :14718359us	0ns	(29.44ns)	13054956us	0ns	(26.11ns)	15606569635ns
-- Unif 10^9  :14881655us	0ns	(29.76ns)	13570124us	0ns	(27.14ns)	16016751788ns
-- Asc        :9100799us	0ns	(18.20ns)	408963us	0ns	(0.82ns)	8304776718ns
-- Equal      :3414962us	0ns	(6.83ns)	366190us	0ns	(0.73ns)	3679710275ns
-- Sqrt       :5965277us	0ns	(11.93ns)	5036015us	0ns	(10.07ns)	
Array size: 750000000
-- Unif       :22358553us	0ns	(29.81ns)	20524789us	0ns	(27.37ns)	25079465890ns
-- Unif 10^9  :18313078us	0ns	(24.42ns)	14720723us	0ns	(19.63ns)	18262286007ns
-- Asc        :13621050us	0ns	(18.16ns)	612766us	0ns	(0.82ns)	12444949002ns
-- Equal      :5116154us	0ns	(6.82ns)	547683us	0ns	(0.73ns)	5483758649ns
-- Sqrt       :8930189us	0ns	(11.91ns)	7629860us	0ns	(10.17ns)	
Array size: 1000000000
-- Unif       :30038365us	0ns	(30.04ns)	28222619us	0ns	(28.22ns)	34987965641ns
-- Unif 10^9  :22362200us	0ns	(22.36ns)	17623533us	0ns	(17.62ns)	21520240329ns
-- Asc        :18291425us	0ns	(18.29ns)	866287us	0ns	(0.87ns)	16593542366ns
-- Equal      :6832769us	0ns	(6.83ns)	730736us	0ns	(0.73ns)	7314833060ns
-- Sqrt       :11957989us	0ns	(11.96ns)	9960763us	0ns	(9.96ns)	

running 1 test
=== Test u64 ===	Ska Sort		Raw Voracious sort	
Array size: 100
-- Unif       :3us	0ns	(31.01ns)	2us	0ns	(21.62ns)	13791ns
-- Unif 10^9  :2us	0ns	(23.25ns)	2us	0ns	(21.44ns)	11547ns
-- Asc        :0us	0ns	(4.07ns)	0us	0ns	(2.14ns)	6437ns
-- Equal      :0us	0ns	(1.30ns)	0us	0ns	(1.29ns)	3756ns
-- Sqrt       :2us	0ns	(20.73ns)	1us	0ns	(13.75ns)	
Array size: 1000
-- Unif       :29us	0ns	(29.87ns)	35us	0ns	(35.56ns)	76592ns
-- Unif 10^9  :52us	0ns	(52.92ns)	18us	0ns	(18.96ns)	142447ns
-- Asc        :50us	0ns	(50.11ns)	1us	0ns	(1.43ns)	154737ns
-- Equal      :35us	0ns	(35.17ns)	0us	0ns	(0.93ns)	122372ns
-- Sqrt       :25us	0ns	(25.75ns)	14us	0ns	(14.93ns)	
Array size: 10000
-- Unif       :231us	0ns	(23.18ns)	233us	0ns	(23.34ns)	694693ns
-- Unif 10^9  :377us	0ns	(37.73ns)	241us	0ns	(24.13ns)	666791ns
-- Asc        :312us	0ns	(31.25ns)	14us	0ns	(1.41ns)	987300ns
-- Equal      :198us	0ns	(19.82ns)	7us	0ns	(0.73ns)	687684ns
-- Sqrt       :706us	0ns	(70.68ns)	235us	0ns	(23.51ns)	
Array size: 100000
-- Unif       :3007us	0ns	(30.08ns)	2046us	0ns	(20.46ns)	2420715ns
-- Unif 10^9  :4031us	0ns	(40.31ns)	1677us	0ns	(16.78ns)	3220412ns
-- Asc        :2243us	0ns	(22.44ns)	78us	0ns	(0.78ns)	2117382ns
-- Equal      :1385us	0ns	(13.86ns)	56us	0ns	(0.56ns)	1433518ns
-- Sqrt       :6408us	0ns	(64.09ns)	3871us	0ns	(38.71ns)	
Array size: 500000
-- Unif       :15744us	0ns	(31.49ns)	9107us	0ns	(18.21ns)	12260783ns
-- Unif 10^9  :16719us	0ns	(33.44ns)	13566us	0ns	(27.13ns)	18519604ns
-- Asc        :11628us	0ns	(23.26ns)	454us	0ns	(0.91ns)	17751977ns
-- Equal      :7142us	0ns	(14.28ns)	566us	0ns	(1.13ns)	7786090ns
-- Sqrt       :22148us	0ns	(44.30ns)	19293us	0ns	(38.59ns)	
Array size: 1000000
-- Unif       :28382us	0ns	(28.38ns)	20670us	0ns	(20.67ns)	25658229ns
-- Unif 10^9  :35953us	0ns	(35.95ns)	25633us	0ns	(25.63ns)	40531960ns
-- Asc        :24075us	0ns	(24.08ns)	996us	0ns	(1.00ns)	23209017ns
-- Equal      :15396us	0ns	(15.40ns)	739us	0ns	(0.74ns)	15374888ns
-- Sqrt       :37134us	0ns	(37.13ns)	35735us	0ns	(35.74ns)	
Array size: 2000000
-- Unif       :55508us	0ns	(27.75ns)	48883us	0ns	(24.44ns)	59768282ns
-- Unif 10^9  :77683us	0ns	(38.84ns)	58348us	0ns	(29.17ns)	82214058ns
-- Asc        :49164us	0ns	(24.58ns)	1842us	0ns	(0.92ns)	44866168ns
-- Equal      :29028us	0ns	(14.51ns)	1468us	0ns	(0.73ns)	30779479ns
-- Sqrt       :83917us	0ns	(41.96ns)	74483us	0ns	(37.24ns)	
Array size: 5000000
-- Unif       :144240us	0ns	(28.85ns)	138215us	0ns	(27.64ns)	174181962ns
-- Unif 10^9  :179506us	0ns	(35.90ns)	127257us	0ns	(25.45ns)	184573385ns
-- Asc        :119902us	0ns	(23.98ns)	4626us		0ns	(0.93ns)	112868637ns
-- Equal      :71550us	0ns	(14.31ns)	3723us		0ns	(0.74ns)	76495869ns
-- Sqrt       :174627us	0ns	(34.93ns)	165828us	0ns	(33.17ns)	
Array size: 10000000
-- Unif       :343469us	0ns	(34.35ns)	299096us	0ns	(29.91ns)	336768303ns
-- Unif 10^9  :342381us	0ns	(34.24ns)	240675us	0ns	(24.07ns)	347308012ns
-- Asc        :241773us	0ns	(24.18ns)	10611us		0ns	(1.06ns)	227447758ns
-- Equal      :142461us	0ns	(14.25ns)	7419us		0ns	(0.74ns)	152990081ns
-- Sqrt       :287912us	0ns	(28.79ns)	128200us	0ns	(12.82ns)	
Array size: 50000000
-- Unif       :1402343us	0ns	(28.05ns)	1270459us	0ns	(25.41ns)	1426721844ns
-- Unif 10^9  :1897302us	0ns	(37.95ns)	1222189us	0ns	(24.44ns)	1757994194ns
-- Asc        :1283853us	0ns	(25.68ns)	45877us		0ns	(0.92ns)	1225226564ns
-- Equal      :710095us		0ns	(14.20ns)	40773us		0ns	(0.82ns)	764881255ns
-- Sqrt       :1164115us	0ns	(23.28ns)	532074us	0ns	(10.64ns)	
Array size: 100000000
-- Unif       :3706622us	0ns	(37.07ns)	2361161us	0ns	(23.61ns)	2860118350ns
-- Unif 10^9  :3832535us	0ns	(38.33ns)	2786954us	0ns	(27.87ns)	4009948237ns
-- Asc        :2554589us	0ns	(25.55ns)	91090us		0ns	(0.91ns)	2441918283ns
-- Equal      :1407148us	0ns	(14.07ns)	72446us		0ns	(0.72ns)	1550720881ns
-- Sqrt       :2148241us	0ns	(21.48ns)	957814us	0ns	(9.58ns)	
Array size: 250000000
-- Unif       :8035009us	0ns	(32.14ns)	6589031us	0ns	(26.36ns)	7476615161ns
-- Unif 10^9  :9844348us	0ns	(39.38ns)	7930622us	0ns	(31.72ns)	11400713375ns
-- Asc        :6531882us	0ns	(26.13ns)	229337us	0ns	(0.92ns)	6099269412ns
-- Equal      :3563247us	0ns	(14.25ns)	182458us	0ns	(0.73ns)	3830928347ns
-- Sqrt       :5211203us	0ns	(20.84ns)	3148731us	0ns	(12.59ns)	
Array size: 500000000
-- Unif       :16382160us	0ns	(32.76ns)	14883104us	0ns	(29.77ns)	17787178424ns
-- Unif 10^9  :19638367us	0ns	(39.28ns)	15063316us	0ns	(30.13ns)	21372143823ns
-- Asc        :12906238us	0ns	(25.81ns)	454180us	0ns	(0.91ns)	12210201841ns
-- Equal      :7061030us	0ns	(14.12ns)	361918us	0ns	(0.72ns)	7650043430ns
-- Sqrt       :10098685us	0ns	(20.20ns)	6707134us	0ns	(13.41ns)	
Array size: 750000000
-- Unif       :24654092us	0ns	(32.87ns)	23236921us	0ns	(30.98ns)	27358801021ns
-- Unif 10^9  :25597831us	0ns	(34.13ns)	17081687us	0ns	(22.78ns)	26078402835ns
-- Asc        :19422188us	0ns	(25.90ns)	682024us	0ns	(0.91ns)	18281995788ns
-- Equal      :10549270us	0ns	(14.07ns)	542194us	0ns	(0.72ns)	11474931030ns
-- Sqrt       :15067788us	0ns	(20.09ns)	11189625us	0ns	(14.92ns)	
Array size: 1000000000
-- Unif       :33051195us	0ns	(33.05ns)	31869860us	0ns	(31.87ns)	38615929161ns
-- Unif 10^9  :32189190us	0ns	(32.19ns)	20978238us	0ns	(20.98ns)	32489815789ns
-- Asc        :25853143us	0ns	(25.85ns)	910908us	0ns	(0.91ns)	24368838659ns
-- Equal      :14048920us	0ns	(14.05ns)	723287us	0ns	(0.72ns)	15283302137ns
-- Sqrt       :20039974us	0ns	(20.04ns)	12795032us	0ns	(12.80ns)